<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <meta http-equiv="X-UA-Compatible" content="ie=edge">
  <title>父子组件的数据传递</title>
  <script src="./vue.js"></script>
</head>
<body>
  <div id="root">
    <counter :count="2" @change="handleChange"></counter>
    <counter :count="4" @change="handleChange"></counter>
    <div>{{total}}</div>
  </div>

  <script>
    // 父组件往子组件传值，单向数据流，父组件通过属性的方式传值给子组件，
    // 但是子组件不能直接修改父组件传递过来的值。可以通过将值复制一遍，存放在子组件自己的data中，
    // 然后修改data中的数据即可。

    // 子传父： 通过$emit向上一层触发事件，同时还可传递参数。
    var counter = {
      props: ['count'],
      data: function() {
        return {
          number: this.count
        }
      },
      template: '<div @click="handleClick">{{number}}</div>',
      methods: {
        handleClick: function() {
          this.number += 2;
          this.$emit('change', 2);
        }
      }
    }
    var vm = new Vue({
      el: '#root',
      components: {counter},
      data: {
        total: 5
      },
      methods: {
        handleChange: function(step) {
          this.total += step;
        }
      }
    })
  </script>
</body>
</html>